package com.ssy.lingxi.system.dao;

import com.ssy.lingxi.system.entity.Menu;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface MenuRepository extends JpaRepository<Menu, Long> {

    List<Menu> findBySource(Integer source);

    /**
    * 根据父ID查询子菜单
    * @author wrc
    * @date 2020/7/16
    */
    List<Menu> findAllByParentIdEquals(Long parentId);

    void deleteAllByParentIdAndTypeEquals(Long id,Integer type);

    List<Menu> findAllByParentIdAndTypeEquals(Long id,Integer type);

    List<Menu> findAllByIdAndTypeEquals(Long id,Integer type);

    List<Menu> findAllByTypeEqualsAndParentIdIn(Integer type,List<Long> ids);

    List<Menu> findByTypeAndIdIn(Integer type, List<Long> ids);

    boolean existsByParentId(Long parentId);

    List<Menu> findAllByTypeEqualsAndParentId(Integer type,Long parentId);

    List<Menu> findByParentIdAndSourceAndSortGreaterThanEqual(Long parentId, Integer source, Integer sort);

    List<Menu> findByParentIdAndSourceAndSortGreaterThanEqualAndIdNot(Long parentId, Integer source, Integer sort, Long id);



    /**
     * 根据url、source、type判断菜单是否已经存在，用于新增菜单
     * @param url 菜单Url
     * @param source 菜单适用的平台客户端
     * @param type 类型
     * @return 是/否
     */
    Boolean existsByUrlAndSourceAndType(String url, Integer source, Integer type);

    /**
     * 根据code、source、type、id判断菜单是否已经存在，用于修改菜单
     * @param code 菜单编码
     * @param source 菜单适用的平台客户端
     * @param type 类型
     * @param id 菜单Id
     * @return 是/否
     */
    Boolean existsByCodeAndSourceAndTypeAndIdNot(String code, Integer source, Integer type, Long id);

    /**
     * 根据code、source、type、id列表判断按钮是否存在，用于修改菜单时判断按钮编码是否已经存在
     * @param codeList 按钮编码列表
     * @param source 菜单按钮适用的平台客户端
     * @param type 类型
     * @param ids 按钮Id列表
     * @return 是/否
     */
    Boolean existsBySourceAndTypeAndCodeInAndIdNotIn(Integer source, Integer type, List<String> codeList, List<Long> ids);
}
